package com.singleton.hungry;

/**
 * 静态代码块的方式创建单例 和 静态常量的方式其实是类似的
 * 1 构造方法私有
 * 2 创建一个静态成员变量（自己），（不是静态变量，静态代码块无法使用）
 * 3 编写静态方法，new 出自己
 * 4 编写 public static getInstance方法 ，返回单例对象
 */
public class Singleton_02 {
    public static void main(String[] args) {
        //测试
        //Single02 single02 = new Single02(); 因为构造方法私有所以无法new对象
        Single02 instance1 = Single02.getInstance();
        Single02 instance2 = Single02.getInstance();
        System.out.println(instance1 == instance2 );
        System.out.println("instance1 hashcode :" + instance1);
        System.out.println("instance2 hashcode :" + instance2);
    }
}

class Single02{

    //1 构造方法私有
    private Single02(){}

    //2 静态成员变量
    private static Single02 single02 ;

    //3 静态代码块
    static {
        single02 = new Single02();
    }

    //4 public static 的getInstance方法，返回单例
    public static Single02 getInstance(){
        return single02;
    }
}

